package com.rebate.dao;

import java.util.List;

import com.rebate.util.Page;

public interface IBaseDao<T> {

	/**
	 * 创建一条数据 如果insert语句中有selectKey字句会返回主键。
	 * 
	 * @param pojo
	 * @return
	 */
	long create(T pojo);

	/**
	 * 删除一条数据
	 * 
	 * @param id
	 *            主键
	 * @return
	 */
	boolean delete(long id);


	/**
	 * 更新一条记录（可带额外数据，额外数据可以为NULL）
	 * 
	 * @param pojo
	 *            数据实体
	 * @param others
	 *            额外数据，Map中的数据允许2类对象：IDataBean/String，不允许再包含子Map
	 * @return
	 */
	boolean update(T pojo);

	/**
	 * 根据Id查询数据明细
	 * 
	 * @param sqlId
	 * @param id
	 * @return
	 */
	T findById(long id);

	/**
	 * 根据指定的条件返回查询结果，全匹配
	 * 
	 * @param data
	 * @return
	 */
	List<T> findBySelective(Object data);
	
	/**
	 * with pagination query
	 * @param stmtId
	 * @param obj
	 * @return
	 */
	<T> Page<T> queryForListPage(final Page<T> page, Object obj);

}